/*
 * Copyright (c) 2024-2025 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include "core/components_ng/base/frame_node.h"
#include "core/interfaces/native/utility/converter.h"
#include "core/components_ng/pattern/scroll_bar/scroll_bar_model_static.h"
#include "core/interfaces/native/implementation/scroller_peer_impl.h"

namespace OHOS::Ace::NG::GeneratedModifier {
namespace ArcScrollBarExtenderAccessor {
Ark_NativePointer ArcScrollBarConstructorImpl(Ark_Int32 id)
{
    auto frameNode = ScrollBarModelStatic::CreateArcScrollBarFrameNode(id);
    CHECK_NULL_RETURN(frameNode, nullptr);
    frameNode->IncRefCount();
    return AceType::RawPtr(frameNode);
}
void SetArcScrollBarOptionsImpl(Ark_NativePointer node, const Ark_ArcScrollBarOptions* options)
{
    auto frameNode = reinterpret_cast<FrameNode *>(node);
    CHECK_NULL_VOID(frameNode);
    if (options) {
        auto scrollerPeer = options->scroller;
        auto scrollProxy = ScrollBarModelStatic::SetScrollBarProxy(frameNode, scrollerPeer->GetScrollBarProxy());
        scrollerPeer->SetScrollBarProxy(scrollProxy);
    }
    const auto state = options ? Converter::OptConvert<DisplayMode>(options->state) : std::nullopt;
    ScrollBarModelStatic::SetState(frameNode, state);
}
} // ArcScrollBarExtenderAccessor
const GENERATED_ArkUIArcScrollBarExtenderAccessor* GetArcScrollBarExtenderAccessor()
{
    static const GENERATED_ArkUIArcScrollBarExtenderAccessor ArcScrollBarExtenderAccessorImpl {
        ArcScrollBarExtenderAccessor::ArcScrollBarConstructorImpl,
        ArcScrollBarExtenderAccessor::SetArcScrollBarOptionsImpl,
    };
    return &ArcScrollBarExtenderAccessorImpl;
}
}
